package sany.iec.utils;

import sany.iec.entity.DataEntity;
import sany.iec.enums.ModbusDataTypeEnum;

/**
 * @Author : 托马斯
 * @Date : 2025/7/7 15:01
 * @Description :
 */
public class ModbusTransformerUtil {

    public static Integer getNumberAB(DataEntity data, short num) {
        if (data.getModbusDataTypeEnum().equals(ModbusDataTypeEnum.INT_AB)) {
            return (int) num;
        } else {
            return DataParseUtil.getIntBA(num);
        }
    }

    public static Float getNumberABCD(DataEntity data, short num1, short num2) {
        if (data.getModbusDataTypeEnum().equals(ModbusDataTypeEnum.LONG_ABCD)) {
            return DataParseUtil.getIntABCD(num1, num2) * 1.0f;
        } else if (data.getModbusDataTypeEnum().equals(ModbusDataTypeEnum.LONG_CDAB)) {
            return DataParseUtil.getIntCDAB(num1, num2) * 1.0f;
        } else if (data.getModbusDataTypeEnum().equals(ModbusDataTypeEnum.FLOAT_ABCD)) {
            return DataParseUtil.getFloatABCD(num1, num2);
        } else if (data.getModbusDataTypeEnum().equals(ModbusDataTypeEnum.FLOAT_CDAB)) {
            return DataParseUtil.getFloatCDAB(num1, num2);
        } else {
            return 1.0f;
        }
    }

    public static Short[] getNumberToShortArray(DataEntity data, Float num) {
        if (data.getModbusDataTypeEnum().equals(ModbusDataTypeEnum.LONG_ABCD)) {
            return DataParseUtil.longABCDToShortArray(num.intValue());
        } else if (data.getModbusDataTypeEnum().equals(ModbusDataTypeEnum.LONG_CDAB)) {
            return DataParseUtil.longCDABToShortArray(num.intValue());
        } else if (data.getModbusDataTypeEnum().equals(ModbusDataTypeEnum.FLOAT_ABCD)) {
            return DataParseUtil.floatABCDToShortArray(num);
        } else if (data.getModbusDataTypeEnum().equals(ModbusDataTypeEnum.FLOAT_CDAB)) {
            return DataParseUtil.floatCDABToShortArray(num);
        } else {
            return new Short[]{1, 1};
        }
    }

    public static Short getNumberToShort(DataEntity data, Float num) {
        Short s = num.shortValue();
        // 得到了AB
        if (data.getModbusDataTypeEnum().equals(ModbusDataTypeEnum.INT_BA)) {
            s = DataParseUtil.getShortBA(DataParseUtil.getShort16Char(num.shortValue()));
        }
        return s;
    }

}
